USE [Bases2]
GO
/****** Object:  StoredProcedure [dbo].[BloquearCheque]    Script Date: 11/28/2011 11:41:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[BloquearCheque]
    @Descripcion varchar(200),    
    @id_cuenta int,
    @id_cheque int,
    @username varchar(100)
AS 
BEGIN
	SET NOCOUNT ON
	BEGIN TRANSACTION
	DECLARE @Contador int
	DECLARE @user_id int
	SET @user_id=0
	SET @Contador=0        
    
    SELECT @Contador=COUNT(1)
    FROM CUENTA
    WHERE CUENTA.id_cuenta=@id_cuenta
    
    IF @Contador=0
    BEGIN
		SELECT 'El numero de cuenta que ingresó no existe'
	END
	ELSE
	BEGIN		       
		SELECT @Contador=COUNT(1)
		FROM BANCO
		INNER JOIN CUENTA ON BANCO.id_banco= CUENTA.id_banco 
		INNER JOIN TIPO_CUENTA ON CUENTA.id_tipo_cuenta=TIPO_CUENTA.id_tipo_cuenta
		INNER JOIN CLIENTE_CUENTA ON CLIENTE_CUENTA.id_cuenta=CUENTA.id_cuenta
		INNER JOIN CLIENTE ON CLIENTE.id_cliente=CLIENTE_CUENTA.id_cliente
		INNER JOIN TIPO_CLIENTE ON TIPO_CLIENTE.id_tipo_cliente=CLIENTE.id_tipo_cliente
		INNER JOIN ESTADO_CUENTA ON ESTADO_CUENTA.id_cuenta=CUENTA.id_cuenta
		WHERE ESTADO_CUENTA.id_tipo_estado=0
		AND ESTADO_CUENTA.estado=1
		AND CUENTA.id_cuenta=@id_cuenta
		
		IF @Contador>0
		BEGIN	
			SELECT 'La cuenta que ingreso se encuentra bloqueada.'
		END
		ELSE
		BEGIN
			SELECT @Contador=COUNT(1)
			FROM BANCO
			INNER JOIN CUENTA ON BANCO.id_banco= CUENTA.id_banco 
			INNER JOIN TIPO_CUENTA ON CUENTA.id_tipo_cuenta=TIPO_CUENTA.id_tipo_cuenta
			INNER JOIN CLIENTE_CUENTA ON CLIENTE_CUENTA.id_cuenta=CUENTA.id_cuenta
			INNER JOIN CLIENTE ON CLIENTE.id_cliente=CLIENTE_CUENTA.id_cliente
			INNER JOIN TIPO_CLIENTE ON TIPO_CLIENTE.id_tipo_cliente=CLIENTE.id_tipo_cliente
			INNER JOIN ESTADO_CUENTA ON ESTADO_CUENTA.id_cuenta=CUENTA.id_cuenta
			WHERE ESTADO_CUENTA.id_tipo_estado=1
			AND ESTADO_CUENTA.estado=1
			AND CUENTA.id_cuenta=@id_cuenta
			
			IF @Contador>0
			BEGIN
				SELECT 'La cuenta que ingreso se encuentra cancelada.'
			END
			ELSE
			BEGIN							
				SELECT @Contador=COUNT(1)
				FROM CHEQUE
				INNER JOIN CHEQUERA ON CHEQUE.id_chequera=CHEQUERA.id_chequera
				INNER JOIN CUENTA ON CUENTA.id_cuenta=CHEQUERA.id_cuenta
				WHERE CUENTA.id_cuenta=@id_cuenta
				AND CHEQUE.id_cheque=@id_cheque
				
				IF @Contador<=0
				BEGIN
					SELECT 'No existe asignado un cheque con el código ingresado que pertenezca a esta cuenta.'
				END
				ELSE
				BEGIN
					SELECT @Contador=COUNT(1)
					FROM CHEQUE
					WHERE cobrado=1	
					AND id_cheque=@id_cheque							
										
					IF @Contador>0
					BEGIN
						SELECT 'El cheque a bloquear ya se ha cobrado.'						
					END
					ELSE
					BEGIN
						SELECT @Contador=COUNT(1)
						FROM ESTADO_CHEQUE
						WHERE estado=1
						AND id_cheque=@id_cheque
						
						IF @Contador>0
						BEGIN							
							SELECT 'El cheque que ingresó ya se encuentra bloqueado'
						END
						ELSE
						BEGIN							
							SELECT TOP(1) @user_id=id_usuario
							FROM USUARIO
							WHERE nombre=@username
														
							
							SELECT TOP(1) @Contador=ESTADO_CHEQUE.id_estado_cheque 				
							FROM ESTADO_CHEQUE
							ORDER BY ESTADO_CHEQUE.id_estado_cheque DESC
							
							IF @contador IS NULL
							BEGIN
								SET @contador=-1
							END
							SET @Contador=@Contador+1													
							
							INSERT INTO ESTADO_CHEQUE 
							VALUES(@Contador,@Descripcion,1,GETDATE(),0,@id_cheque,@user_id)
							
							SELECT 'El cheque se ha bloqueado correctamente.'
						END						
					END
				END				
			END
		END
	END
			       
	COMMIT
	SET NOCOUNT OFF
END
